#!/usr/bin/env python3
"""
多账户逻辑可视化工具
"""

def print_flow_diagram():
    """打印多账户流程图"""
    
    print("🏗️ 多账户交易机器人架构图")
    print("=" * 50)
    
    print("""
┌─────────────────────────────────────────────────────────┐
│                AccountManager                          │
│              (账户管理器)                               │
├─────────────────────────────────────────────────────────┤
│  • 加载配置文件 (accounts_config.json)                  │
│  • 管理账户生命周期                                     │
│  • 健康检查和错误恢复                                   │
│  • 线程池管理 (最多3个并发)                            │
└─────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────┐
│                配置文件解析                               │
├─────────────────────────────────────────────────────────┤
│  accounts_config.json:                                   │
│  {                                                       │
│    "accounts": {                                         │
│      "demo": { "enabled": true, "sandbox": true },       │
│      "live": { "enabled": false, "sandbox": false },     │
│      "demo_conservative": { "enabled": false }           │
│    }                                                     │
│  }                                                       │
└─────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────┐
│              筛选启用的账户                               │
├─────────────────────────────────────────────────────────┤
│  enabled_accounts = ["demo"]  # 只有demo账户启用        │
└─────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────┐
│              并发启动账户                                │
├─────────────────────────────────────────────────────────┤
│  ThreadPoolExecutor.submit(start_account, "demo")       │
└─────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────┐
│              TradingAccount (demo)                      │
│              (单个交易账户)                              │
├─────────────────────────────────────────────────────────┤
│  • 初始化交易所连接 (OKX 沙盒)                          │
│  • 设置交易参数 (杠杆10x, 15分钟K线)                    │
│  • 配置Telegram通知                                      │
│  • 启动交易循环线程                                      │
└─────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────┐
│              交易循环 (每15分钟)                         │
├─────────────────────────────────────────────────────────┤
│  while running:                                          │
│    1. 获取市场数据 (fetch_ohlcv)                         │
│    2. 计算技术指标                                       │
│    3. AI分析 (DeepSeek)                                 │
│    4. 执行交易 (如果信号不是hold)                       │
│    5. 发送Telegram通知                                   │
│    6. 等待15分钟                                         │
└─────────────────────────────────────────────────────────┘
""")

def print_data_flow():
    """打印数据流程图"""
    
    print("\n🔄 数据流程图")
    print("=" * 50)
    
    print("""
环境变量 (.env) ──┐
                  │
                  ▼
配置文件 (accounts_config.json) ──┐
                                  │
                                  ▼
                            AccountManager
                                  │
                                  ▼
                            TradingAccount
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────┐
│                   交易数据流                              │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  OKX API ──► fetch_ohlcv ──► 价格数据 ──► DataFrame    │
│     │                                              │    │
│     │                                              ▼    │
│     │        技术指标计算 ◄─── calculate_technical_indicators
│     │              │                                  │
│     │              ▼                                  │
│     │         AI分析 ◄─── analyze_with_deepseek        │
│     │              │                                  │
│     │              ▼                                  │
│     │         交易信号 ──► execute_trade ──► OKX API   │
│     │              │                                  │
│     │              ▼                                  │
│     │      Telegram通知 ◄─── send_telegram_message     │
│                                                         │
└─────────────────────────────────────────────────────────┘
""")

def print_thread_model():
    """打印线程模型"""
    
    print("\n🧵 线程模型")
    print("=" * 50)
    
    print("""
主线程 (Main Thread)
├── AccountManager.run()
│   ├── 启动所有账户
│   ├── 健康检查线程 ──┐
│   └── 主循环监控      │
│                      │
├── 健康检查线程 (Health Check Thread)
│   ├── 每5分钟检查账户状态
│   ├── 发现异常账户自动重启
│   └── 记录健康状态日志
│
└── 交易账户线程 (Trading Threads)
    ├── demo.trading_loop() ──┐
    │   ├── 每15分钟分析BTC   │
    │   ├── 每15分钟分析ETH   │
    │   ├── 每15分钟分析SOL   │
    │   └── 每15分钟分析DOGE  │
    │                        │
    ├── live.trading_loop() ──┤ (如果启用)
    │   ├── 实盘交易逻辑      │
    │   └── 更严格的风险控制   │
    │                        │
    └── demo_conservative.trading_loop() ──┘ (如果启用)
        ├── 保守策略参数
        └── 低杠杆交易
""")

def print_config_example():
    """打印配置示例"""
    
    print("\n⚙️ 配置示例")
    print("=" * 50)
    
    print("""
1. 环境变量配置 (.env):
   ┌─────────────────────────────────────────┐
   │ DEEPSEEK_API_KEY=sk-xxx...              │
   │ TELEGRAM_BOT_TOKEN=123456:xxx...        │
   │                                         │
   │ # 模拟盘账户                             │
   │ OKX_DEMO_API_KEY=demo_api_key           │
   │ OKX_DEMO_SECRET_KEY=demo_secret         │
   │ OKX_DEMO_PASSPHRASE=demo_passphrase     │
   │ TELEGRAM_DEMO_CHAT_ID=-123456789        │
   │                                         │
   │ # 实盘账户                               │
   │ OKX_LIVE_API_KEY=live_api_key           │
   │ OKX_LIVE_SECRET_KEY=live_secret         │
   │ OKX_LIVE_PASSPHRASE=live_passphrase     │
   │ TELEGRAM_LIVE_CHAT_ID=-987654321        │
   └─────────────────────────────────────────┘

2. 账户配置 (accounts_config.json):
   ┌─────────────────────────────────────────┐
   │ {                                       │
   │   "accounts": {                         │
   │     "demo": {                           │
   │       "enabled": true,                  │
   │       "sandbox": true,                  │
   │       "api_key": "${OKX_DEMO_API_KEY}", │
   │       "config": {                       │
   │         "symbols": [                    │
   │           {"symbol": "BTC/USDT:USDT",   │
   │            "amount": 0.15}              │
   │         ],                              │
   │         "leverage": 10,                 │
   │         "timeframe": "15m"              │
   │       }                                 │
   │     }                                   │
   │   }                                     │
   │ }                                       │
   └─────────────────────────────────────────┘
""")

def print_key_concepts():
    """打印关键概念"""
    
    print("\n💡 关键概念理解")
    print("=" * 50)
    
    concepts = [
        ("AccountManager", "账户管理器", "负责管理所有账户的生命周期，类似管理员"),
        ("TradingAccount", "交易账户", "每个账户是独立的交易机器人"),
        ("并发执行", "多线程", "多个账户同时运行，互不干扰"),
        ("独立配置", "个性化", "每个账户可以有不同的交易标的和策略"),
        ("环境变量", "安全存储", "API密钥等敏感信息存储在.env文件中"),
        ("健康检查", "自动恢复", "系统自动监控账户状态，异常时自动重启"),
        ("线程池", "资源管理", "控制同时运行的账户数量，避免资源耗尽")
    ]
    
    for concept, chinese, description in concepts:
        print(f"• {concept} ({chinese}): {description}")

if __name__ == "__main__":
    print_flow_diagram()
    print_data_flow()
    print_thread_model()
    print_config_example()
    print_key_concepts()
    
    print("\n🎯 总结")
    print("=" * 50)
    print("多账户 = 多个独立的交易机器人")
    print("AccountManager = 管理员")
    print("TradingAccount = 每个机器人")
    print("配置文件 = 机器人的说明书")
    print("环境变量 = 机器人的钥匙")
    print("线程 = 机器人的工作方式")
